<?php
class HelperAlert
{
    private $token = '#';
    
    private $totalCaixas = 0;
    private $nomeAlerta;
    private $data;
    
    private $titulo;
    private $link;
    private $linkParam;
    private $hint;
    
    private $tableClass = 'alertas';
    
    private $campoDataRegistro = 'dataregistro';
    private $campoStatus = 'status';
    
    public function HelperAlert($nomeAlerta, $totalCaixas = 0)
    {
        $this->nomeAlerta = $nomeAlerta;
        $this->totalCaixas = $totalCaixas;
    }
    
    public function setLink($url, $param)
    {
        $this->link = $url;
        $this->linkParam = $param;
    }
    
    public function getLink($dataItem)
    {
        return $this->link . $dataItem[$this->linkParam];
    }
    
    public function setTitulo($texto)
    {
        $this->titulo = $texto;
    }
    
    public function getTitulo($dataItem)
    {
        return $this->substituirTokens($dataItem, $this->titulo);
    }
    
    public function setHint($texto)
    {
        $this->hint = $texto;
    }
    
    public function getHint($dataItem)
    {
        return $this->substituirTokens($dataItem, $this->hint);
    }
    
    public function substituirTokens($dataItem, $texto)
    {
        $textoAlterado = '';
        
        if (strpos($texto, '||') > 0) {
            $lado1 = substr($texto, 0, strpos($texto, '||'));
            $lado2 = substr($texto, strpos($texto, '||') + 2);
            
            $possuiToken = FALSE;
            
            $token = strtok($lado1, $this->token);
            while ($token) {
                if (isset($dataItem[$token])) {
                    $possuiToken = TRUE;
                    break;
                }
                $token = strtok($this->token);
            }
            
            $texto = ($possuiToken) ? $lado1 : $lado2;
        }
        
        $token = strtok($texto, $this->token);
        while ($token) {
            $textoAlterado .= (isset($dataItem[$token])) ? $dataItem[$token] : $token;
            $token = strtok($this->token);
        }
        
        return $textoAlterado;
    }
    
    public function getTotal()
    {
        return count($this->data);
    }
    
    public function setData($data)
    {
        $this->data = $data;
    }
    
    public function getTotalCaixas()
    {
        return $this->totalCaixas;
    }
    
    public function getDataRegistro($dataItem)
    {
        return isset($dataItem[$this->campoDataRegistro]) ? TUtils::DataEnPt($dataItem[$this->campoDataRegistro]) : NULL;
    }
    
    public function setCampoStatus($campo)
    {
        $this->campoStatus = $campo;
    }
    
    public function getStatus($dataItem)
    {
        return isset($dataItem[$this->campoStatus]) ? $dataItem[$this->campoStatus] : NULL;
    }
    
    public function render()
    {
        $html = '';
        if ($this->getTotal()) { 
            $this->totalCaixas++;
            $html .= '<fieldset class="grupoAlertas" ';
            $html .= ($this->totalCaixas % 2) ? 'style="clear:both;">' : '>';
		    $html .= '<legend>' . $this->nomeAlerta . ' (<b>' . $this->getTotal() . '</b>)</legend>';
		    $html .= $this->renderBody();
	        $html .= '</fieldset>';
	    }
		return $html;
    }
    
    public function renderBody() 
    {
        if ($this->data AND is_array($this->data)) {
            $html = '<table class="' . $this->tableClass . '">';
            $i = 0;
            foreach ($this->data as $d) {
                $hint = ($this->getHint($d)) ? $this->getHint($d) : '';
                $class = (++$i % 2) ? '' : 'class="odd"';
                
                $html .= '<tr ' . $class . '>';
                
                if ($this->getDataRegistro($d)) {
                    $html .= 	'<td>' . $this->getDataRegistro($d) . '</td>';
                }
                
                $html .= 	'<td>';
                $html .= 		'<a href="' . $this->getLink($d) . '" title="' . $hint . '">';
                $html .=            $this->getTitulo($d);
                $html .= 		'</a>';
                $html .= 	'</td>';
                
                if ($this->getStatus($d)) {
                    $html .= 	'<td>' . $this->getStatus($d) . '</td>';
                }
                $html .= '</tr>';
            }
            $html .= '</table>';
            return $html;
        }
    } 
}